package com.piggy.logi.sys.domain;

import com.baomidou.mybatisplus.annotation.*;
import com.piggy.logi.sys.enums.GoodOrderStatusEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.math.BigDecimal;
import java.util.Date;

@Data
@NoArgsConstructor
@ApiModel("货源订单")
@Accessors(chain = true)
@TableName("logi_good_order")
public class LogiGoodOrder {

    @TableId(value = "good_order_id")
    private Long goodOrderId;

    @ApiModelProperty("订单类型：0.线下订单 1.线上订单")
    private Integer goodOrderType;

    @ApiModelProperty(value = "部门ID")
    private Long deptId;

    @ApiModelProperty("订单号")
    private String orderCode;

    /** 母单（不为0则是拆单，根节点订单） */
    @ApiModelProperty("母单（不为0则是拆单，根节点订单）")
    private Long mainParentId;

    /** 母单（不为0则是拆单，上级节点订单） */
    @ApiModelProperty("母单（不为0则是拆单，上级节点订单）")
    private Long parentId;

    /** 发货方ID */
    @ApiModelProperty("发货方ID")
    private Long shipId;

    /** 收货方ID */
    @ApiModelProperty("收货方ID")
    private Long deliveryId;

    /** 所属项目 */
    @ApiModelProperty("所属项目")
    private Long projectId;

    /** 货主订单号 */
    @ApiModelProperty("货主订单号")
    private String ownerOutCode;

    @ApiModelProperty("始发地区县ID")
    private Integer originDistractId;

    @ApiModelProperty("始发地详细")
    private String originAddress;

    @ApiModelProperty("始发地经度")
    private Float originLng;

    @ApiModelProperty("始发地纬度")
    private Float originLat;

    @ApiModelProperty("目的地区县ID")
    private Integer destinationDistractId;

    @ApiModelProperty("目的地详细")
    private String destinationAddress;

    @ApiModelProperty("目的地经度")
    private Float destinationLng;

    @ApiModelProperty("目的地纬度")
    private Float destinationLat;

    /** 计划发车时间 */
    @ApiModelProperty("计划发车时间")
    private Date departureTime;

    /** 计划到达时间 */
    @ApiModelProperty("计划到达时间")
    private Date arrivalTime;

    /** 提货单号 */
    @ApiModelProperty("提货单号")
    private String pickupOrderNo;

    /** 预约提货时间 */
    @ApiModelProperty("预约提货时间")
    private Date pickupTime;

    /** 预约送货时间 */
    @ApiModelProperty("预约送货时间")
    private Date deliveryTime;

    /** 订单附件 */
    @ApiModelProperty("订单附件")
    private String orderAttach;

    /** 合同附件 */
    @ApiModelProperty("合同附件")
    private String contractAttach;

    /** 发票附件 */
    @ApiModelProperty("发票附件")
    private String invoiceAttach;

    /** 其他材料 */
    @ApiModelProperty("其他材料")
    private String otherFiles;

    /** 发货网点ID */
    @ApiModelProperty("发货网点ID")
    private Integer shipNetId;

    /** 紧急程度（0正常1加急） */
    @ApiModelProperty("紧急程度（0正常1加急）")
    private Integer urgencyDegree;

    /** 发货提货方式 */
    @ApiModelProperty("发货提货方式")
    private Integer shipPickUpWay;

    /** 到达提货方式 */
    @ApiModelProperty("到达提货方式")
    private Integer arrivalPickUpWay;

    /** 相关服务 */
    @ApiModelProperty("相关服务")
    private Integer relatedService;

    /** 相关服务说明 */
    @ApiModelProperty("相关服务说明")
    private String relatedServiceDesc;

    /** 发货方联系人 */
    @ApiModelProperty("发货方联系人")
    private String shipContacts;

    /** 发货方联系电话 */
    @ApiModelProperty("发货方联系电话")
    private String shipContactTel;

    /** 收货方联系人 */
    @ApiModelProperty("收货方联系人")
    private String deliveryContacts;

    /** 收货方联系电话 */
    @ApiModelProperty("收货方联系电话")
    private String deliveryContactTel;

    /**
     * 订单状态
     * @see GoodOrderStatusEnum
     */
    @ApiModelProperty("订单状态")
    private Integer status;

    @ApiModelProperty("关联运单id")
    @TableField(updateStrategy = FieldStrategy.IGNORED)
    private Long waybillId;

    @ApiModelProperty("运单编号")
    @TableField(updateStrategy = FieldStrategy.IGNORED)
    private String outCode;

    @ApiModelProperty("支付金额")
    private BigDecimal payAmount;

    @ApiModelProperty(value = "支付时间")
    private Date payTime;

    /** 备注 */
    @ApiModelProperty("备注")
    private String remark;

    @TableField(fill = FieldFill.INSERT)
    private String createBy;

    private Date createTime;

    private Date updateTime;

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String updateBy;
}
